/*
 * This file is part of WiiuseJ.
 * 
 * WiiuseJ is free software: you can redistribute it and/or modify it under the
 * terms of the GNU General Public License as published by the Free Software
 * Foundation, either version 3 of the License, or (at your option) any later
 * version.
 * 
 * WiiuseJ is distributed in the hope that it will be useful, but WITHOUT ANY
 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
 * A PARTICULAR PURPOSE. See the GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License along with
 * WiiuseJ. If not, see <http://www.gnu.org/licenses/>.
 */
package wiiusej.wiiusejevents.physicalevents;

/**
 * Class which represents a buttons event from a Guitar Hero controller.
 * 
 * @author guiguito
 */
public class GuitarHeroButtonsEvent extends ButtonsEvent
{

    private static short GUITAR_HERO_3_BUTTON_STRUM_UP = 0x0001;
    private static short GUITAR_HERO_3_BUTTON_YELLOW = 0x0008;
    private static short GUITAR_HERO_3_BUTTON_GREEN = 0x0010;
    private static short GUITAR_HERO_3_BUTTON_BLUE = 0x0020;
    private static short GUITAR_HERO_3_BUTTON_RED = 0x0040;
    private static short GUITAR_HERO_3_BUTTON_ORANGE = 0x0080;
    private static short GUITAR_HERO_3_BUTTON_PLUS = 0x0400;
    private static short GUITAR_HERO_3_BUTTON_MINUS = 0x1000;
    private static short GUITAR_HERO_3_BUTTON_STRUM_DOWN = 0x4000;
    private static int GUITAR_HERO_3_BUTTON_ALL = 0xFEFF;

    /**
     * Constructor of the guitar hero buttons Event.
     * 
     * @param id
     *            id of the wiimote.
     * @param buttonsJustPressed
     *            buttons just pressed.
     * @param buttonsJustReleased
     *            buttons just released.
     * @param buttonsHeld
     *            buttons just pressed.
     */
    public GuitarHeroButtonsEvent(
        int id,
        short buttonsJustPressed,
        short buttonsJustReleased,
        short buttonsHeld)
    {
        super(id, buttonsJustPressed, buttonsJustReleased, buttonsHeld);
    }

    /* Button Strum Up */

    public boolean isButtonStrumUpJustPressed()
    {
        return isButtonJustPressed(GUITAR_HERO_3_BUTTON_STRUM_UP);
    }

    public boolean isButtonStrumUpJustReleased()
    {
        return isButtonJustReleased(GUITAR_HERO_3_BUTTON_STRUM_UP);
    }

    public boolean isButtonStrumUpeHeld()
    {
        return isButtonHeld(GUITAR_HERO_3_BUTTON_STRUM_UP);
    }

    public boolean isButtonStrumUpPressed()
    {
        return isButtonPressed(GUITAR_HERO_3_BUTTON_STRUM_UP);
    }

    /* Button Strum Down */

    public boolean isButtonStrumDownJustPressed()
    {
        return isButtonJustPressed(GUITAR_HERO_3_BUTTON_STRUM_DOWN);
    }

    public boolean isButtonStrumDownJustReleased()
    {
        return isButtonJustReleased(GUITAR_HERO_3_BUTTON_STRUM_DOWN);
    }

    public boolean isButtonStrumDowneHeld()
    {
        return isButtonHeld(GUITAR_HERO_3_BUTTON_STRUM_DOWN);
    }

    public boolean isButtonStrumDownPressed()
    {
        return isButtonPressed(GUITAR_HERO_3_BUTTON_STRUM_DOWN);
    }

    /* Button blue */

    public boolean isButtonBlueJustPressed()
    {
        return isButtonJustPressed(GUITAR_HERO_3_BUTTON_BLUE);
    }

    public boolean isButtonBlueJustReleased()
    {
        return isButtonJustReleased(GUITAR_HERO_3_BUTTON_BLUE);
    }

    public boolean isButtonBlueHeld()
    {
        return isButtonHeld(GUITAR_HERO_3_BUTTON_BLUE);
    }

    public boolean isButtonBluePressed()
    {
        return isButtonPressed(GUITAR_HERO_3_BUTTON_BLUE);
    }

    /* Button Green */

    public boolean isButtonGreenJustPressed()
    {
        return isButtonJustPressed(GUITAR_HERO_3_BUTTON_GREEN);
    }

    public boolean isButtonGreenJustReleased()
    {
        return isButtonJustReleased(GUITAR_HERO_3_BUTTON_GREEN);
    }

    public boolean isButtonGreenHeld()
    {
        return isButtonHeld(GUITAR_HERO_3_BUTTON_GREEN);
    }

    public boolean isButtonGreenPressed()
    {
        return isButtonPressed(GUITAR_HERO_3_BUTTON_GREEN);
    }

    /* Button Minus */

    public boolean isButtonMinusJustPressed()
    {
        return isButtonJustPressed(GUITAR_HERO_3_BUTTON_MINUS);
    }

    public boolean isButtonMinusJustReleased()
    {
        return isButtonJustReleased(GUITAR_HERO_3_BUTTON_MINUS);
    }

    public boolean isButtonMinusHeld()
    {
        return isButtonHeld(GUITAR_HERO_3_BUTTON_MINUS);
    }

    public boolean isButtonMinusPressed()
    {
        return isButtonPressed(GUITAR_HERO_3_BUTTON_MINUS);
    }

    /* Button Orange */

    public boolean isButtonOrangeJustPressed()
    {
        return isButtonJustPressed(GUITAR_HERO_3_BUTTON_ORANGE);
    }

    public boolean isButtonOrangeJustReleased()
    {
        return isButtonJustReleased(GUITAR_HERO_3_BUTTON_ORANGE);
    }

    public boolean isButtonOrangeHeld()
    {
        return isButtonHeld(GUITAR_HERO_3_BUTTON_ORANGE);
    }

    public boolean isButtonOrangePressed()
    {
        return isButtonPressed(GUITAR_HERO_3_BUTTON_ORANGE);
    }

    /* Button Plus */

    public boolean isButtonPlusJustPressed()
    {
        return isButtonJustPressed(GUITAR_HERO_3_BUTTON_PLUS);
    }

    public boolean isButtonPlusJustReleased()
    {
        return isButtonJustReleased(GUITAR_HERO_3_BUTTON_PLUS);
    }

    public boolean isButtonPlusHeld()
    {
        return isButtonHeld(GUITAR_HERO_3_BUTTON_PLUS);
    }

    public boolean isButtonPlusPressed()
    {
        return isButtonPressed(GUITAR_HERO_3_BUTTON_PLUS);
    }

    /* Button Red */

    public boolean isButtonRedJustPressed()
    {
        return isButtonJustPressed(GUITAR_HERO_3_BUTTON_RED);
    }

    public boolean isButtonRedJustReleased()
    {
        return isButtonJustReleased(GUITAR_HERO_3_BUTTON_RED);
    }

    public boolean isButtonRedHeld()
    {
        return isButtonHeld(GUITAR_HERO_3_BUTTON_RED);
    }

    public boolean isButtonRedPressed()
    {
        return isButtonPressed(GUITAR_HERO_3_BUTTON_RED);
    }

    /* Button Yellow */

    public boolean isButtonYellowJustPressed()
    {
        return isButtonJustPressed(GUITAR_HERO_3_BUTTON_YELLOW);
    }

    public boolean isButtonYellowJustReleased()
    {
        return isButtonJustReleased(GUITAR_HERO_3_BUTTON_YELLOW);
    }

    public boolean isButtonYellowHeld()
    {
        return isButtonHeld(GUITAR_HERO_3_BUTTON_YELLOW);
    }

    public boolean isButtonYellowPressed()
    {
        return isButtonPressed(GUITAR_HERO_3_BUTTON_YELLOW);
    }
}
